/*------------------------------------------------------------------------------
--                                                                            --
--       This software is confidential and proprietary and may be used        --
--        only as expressly authorized by a licensing agreement from          --
--                                                                            --
--                            Hantro Products Oy.                             --
--                                                                            --
--                   (C) COPYRIGHT 2006 HANTRO PRODUCTS OY                    --
--                            ALL RIGHTS RESERVED                             --
--                                                                            --
--                 The entire notice above must be reproduced                 --
--                  on all copies and should not be removed.                  --
--                                                                            --
--------------------------------------------------------------------------------
--
--  Description : PP HW register access functions interface
--
--------------------------------------------------------------------------------
--
--  Version control information, please leave untouched.
--
--  $RCSfile: pphwregdrv.h,v $
--  $Date: 2006/10/27 10:10:10 $
--  $Revision: 1.12 $
--
------------------------------------------------------------------------------*/
#ifndef _PPHWREGDRV_H_
#define _PPHWREGDRV_H_

#include "basetype.h"

#define PP_X170_REGISTERS(d)    (d ? 41 : 26)

#define PP_X170_IRQ_PP_RDY      0x01U
#define PP_X170_IRQ_BUS_ERROR   0x02U

#define PP_X170_REG_START       0xF0
#define PP_SYNTH_CONFIG_REG     (100*4)

#define PP_CONTROL_REG(d)       (d ? 25 : 2)
#define PP_MASK1_START(d)       (d ? 26 : 13)
#define PP_MASK2_START(d)       (d ? 27 : 14)
#define PP_MASK1_SIZE(d)        (d ? 28 : 15)
#define PP_MASK2_SIZE(d)        (d ? 29 : 16)
#define PP_PIP_0(d)             (d ? 30 : 17)
#define PP_PIP_1(d)             (d ? 31 : 18)
#define PP_BUFFER_WID(d)        (d ? 32 : 18)

void SetPpFrameBufferWidth(u32 value, u32 * regBase, u32 altRegs);

void SetPpOutFormat(u32 format, u32 * regBase, u32 altRegs);
void SetPpOutHeight(u32 height, u32 * regBase, u32 altRegs);
void SetPpOutWidth(u32 width, u32 * regBase, u32 altRegs);
void SetPpOutLumaOrRgbAddr(u32 addr, u32 * regBase);
void SetPpOutChromaAddr(u32 addr, u32 * regBase);
void SetPpOutEndianess(u32 endian, u32 * regBase);
void SetPpOutWordSwap(u32 swap, u32 * regBase);

void SetPpInputData32bitSwap(u32 enable, u32 * regBase);
void SetPpInEndianess(u32 endian, u32 * regBase);
void SetPpInFormat(u32 format, u32 * regBase, u32 altRegs);
void SetPpInLumAddr(u32 addr, u32 * regBase);
void SetPpInCbAddr(u32 addr, u32 * regBase);
void SetPpInCrAddr(u32 addr, u32 * regBase);

void SetPpInYOffset(u32 value, u32 * regBase);
void SetPpInXOffset(u32 value, u32 * regBase);
void SetPpInHeight(u32 value, u32 * regBase);
void SetPpInWidth(u32 value, u32 * regBase, u32 altRegs);
void SetPpInCroppedWidth(u32 value, u32 * regBase);

void SetPpCtrlBusBurstLength(u32 burst, u32 * regBase);
void SetPpCtrlDecPipeline(u32 pipe, u32 * regBase);
void SetPpCtrlIrqDisabled(u32 mask, u32 * regBase);
void SetPpCtrlIrqStatClear(u32 mask, u32 * regBase);
void SetPpCtrlClockGating(u32 enable, u32 * regBase);
void SetPpAsicDataDiscardEnable(u32 enable,u32 * regBase);

void SetPpContrastThr1(u32 value, u32 * regBase);
void SetPpContrastThr2(u32 value, u32 * regBase);
void SetPpContrastOffset1(i32 value, u32 * regBase);
void SetPpContrastOffset2(i32 value, u32 * regBase);

void SetPpColConvYCoeffA2(u32 value, u32 * regBase);
void SetPpColConvYCoeffA1(u32 value, u32 * regBase);
void SetPpColConvCoeffB(u32 coeff, u32 * regBase);
void SetPpColConvCoeffC(u32 coeff, u32 * regBase);
void SetPpColConvCoeffD(u32 coeff, u32 * regBase);
void SetPpColConvCoeffE(u32 coeff, u32 * regBase);
void SetPpColConvCoeffF(i32 coeff, u32 * regBase);

void SetPpColConvYCbCrRange(u32 value, u32 * regBase);
void SetPpColConvRGBSize(u32 size, u32 * regBase);
void SetPpColConvPadding1R(u32 size, u32 * regBase);
void SetPpColConvPadding1G(u32 size, u32 * regBase);
void SetPpColConvPadding1B(u32 size, u32 * regBase);
void SetPpColConvMaskR(u32 mask, u32 * regBase);
void SetPpColConvMaskG(u32 mask, u32 * regBase);
void SetPpColConvMaskB(u32 mask, u32 * regBase);

void SetPpRotation(u32 rotate, u32 * regBase);

void SetPpMask1Enable(u32 value, u32 * regBase, u32 altRegs);
void SetPpMask1TopLeftY(u32 value, u32 * regBase, u32 altRegs);
void SetPpMask1TopLeftX(u32 value, u32 * regBase, u32 altRegs);
void SetPpMask1BottomRightY(u32 value, u32 * regBase, u32 altRegs);
void SetPpMask1BottomRightX(u32 value, u32 * regBase, u32 altRegs);

void SetPpMask2Enable(u32 value, u32 * regBase, u32 altRegs);
void SetPpMask2TopLeftY(u32 value, u32 * regBase, u32 altRegs);
void SetPpMask2TopLeftX(u32 value, u32 * regBase, u32 altRegs);
void SetPpMask2BottomRightY(u32 value, u32 * regBase, u32 altRegs);
void SetPpMask2BottomRightX(u32 value, u32 * regBase, u32 altRegs);

void SetPpOvercrossRightEnable(u32 value, u32 * regBase, u32 altRegs);
void SetPpOvercrossLeftEnable(u32 value, u32 * regBase, u32 altRegs);
void SetPpOvercrossUpEnable(u32 value, u32 * regBase, u32 altRegs);
void SetPpOvercrossDownEnable(u32 value, u32 * regBase, u32 altRegs);
void SetPpOvercrossUpSize(u32 value, u32 * regBase, u32 altRegs);
void SetPpOvercrossDownSize(u32 value, u32 * regBase, u32 altRegs);
void SetPpOvercrossRightSize(u32 value, u32 * regBase, u32 altRegs);
void SetPpOvercrossLeftSize(u32 value, u32 * regBase, u32 altRegs);

void SetPpScalingModeHor(u32 mode, u32 * regBase);
void SetPpScalingModeVer(u32 mode, u32 * regBase);
void SetPpScalingCoeffH(u32 coeff, u32 * regBase);
void SetPpScalingCoeffV(u32 coeff, u32 * regBase);
void SetPpScalingCoeffInvH(u32 coeff, u32 * regBase);
void SetPpScalingCoeffInvV(u32 coeff, u32 * regBase);

#define SetPpScalingCoeffCh( coeff, regBase) SetPpScalingCoeffInvH((coeff), (regBase))
#define SetPpScalingCoeffCv( coeff, regBase) SetPpScalingCoeffInvV((coeff), (regBase))

u32 GetPpFrameBufferWidth(const u32 * regBase, u32 altRegs);

u32 GetPpOutFormat(const u32 * regBase, u32 altRegs);
u32 GetPpOutHeight(const u32 * regBase, u32 altRegs);
u32 GetPpOutWidth(const u32 * regBase, u32 altRegs);
u32 GetPpOutLumaOrRgbAddr(const u32 * regBase);
u32 GetPpOutChromaAddr(const u32 * regBase);
u32 GetPpOutEndianess(const u32 * regBase);
u32 GetPpOutWordSwap(const u32 * regBase);

u32 GetPpInputData32bitSwap(const u32 * regBase);
u32 GetPpInEndianess(const u32 * regBase);
u32 GetPpInFormat(const u32 * regBase, u32 altRegs);
u32 GetPpInLumAddr(const u32 * regBase);
u32 GetPpInCbAddr(const u32 * regBase);
u32 GetPpInCrAddr(const u32 * regBase);

u32 GetPpInYOffset(const u32 * regBase);
u32 GetPpInXOffset(const u32 * regBase);
u32 GetPpInHeight(const u32 * regBase);
u32 GetPpInWidth(const u32 * regBase, u32 altRegs);
u32 GetPpInCroppedWidth(const u32 * regBase);

u32 GetPpCtrlBusBurstLength(const u32 * regBase);
u32 GetPpCtrlDecPipeline(const u32 * regBase);
u32 GetPpCtrlIrqDisabled(const u32 * regBase);
u32 GetPpCtrlIrqStat(const u32 * regBase);
u32 GetPpCtrlClockGating(const u32 * regBase);
u32 GetPpAsicDataDiscardEnable(const u32 * regBase);

u32 GetPpContrastThr1(const u32 * regBase);
u32 GetPpContrastThr2(const u32 * regBase);
i32 GetPpContrastOffset1(const u32 * regBase);
i32 GetPpContrastOffset2(const u32 * regBase);

u32 GetPpColConvYCoeffA2(const u32 * regBase);
u32 GetPpColConvYCoeffA1(const u32 * regBase);
u32 GetPpColConvCoeffB(const u32 * regBase);
u32 GetPpColConvCoeffC(const u32 * regBase);
u32 GetPpColConvCoeffD(const u32 * regBase);
u32 GetPpColConvCoeffE(const u32 * regBase);
i32 GetPpColConvCoeffF(const u32 * regBase);

u32 GetPpColConvYCbCrRange(const u32 * regBase);
u32 GetPpColConvRGBSize(const u32 * regBase);
u32 GetPpColConvPadding1R(const u32 * regBase);
u32 GetPpColConvPadding1G(const u32 * regBase);
u32 GetPpColConvPadding1B(const u32 * regBase);
u32 GetPpColConvMaskR(const u32 * regBase);
u32 GetPpColConvMaskG(const u32 * regBase);
u32 GetPpColConvMaskB(const u32 * regBase);

u32 GetPpRotation(const u32 * regBase);

u32 GetPpMask1Enable(const u32 * regBase, u32 altRegs);
u32 GetPpMask1TopLeftY(const u32 * regBase, u32 altRegs);
u32 GetPpMask1TopLeftX(const u32 * regBase, u32 altRegs);
u32 GetPpMask1BottomRightY(const u32 * regBase, u32 altRegs);
u32 GetPpMask1BottomRightX(const u32 * regBase, u32 altRegs);

u32 GetPpMask2Enable(const u32 * regBase, u32 altRegs);
u32 GetPpMask2TopLeftY(const u32 * regBase, u32 altRegs);
u32 GetPpMask2TopLeftX(const u32 * regBase, u32 altRegs);
u32 GetPpMask2BottomRightY(const u32 * regBase, u32 altRegs);
u32 GetPpMask2BottomRightX(const u32 * regBase, u32 altRegs);

u32 GetPpOvercrossRightEnable(const u32 * regBase, u32 altRegs);
u32 GetPpOvercrossLeftEnable(const u32 * regBase, u32 altRegs);
u32 GetPpOvercrossUpEnable(const u32 * regBase, u32 altRegs);
u32 GetPpOvercrossDownEnable(const u32 * regBase, u32 altRegs);
u32 GetPpOvercrossUpSize(const u32 * regBase, u32 altRegs);
u32 GetPpOvercrossDownSize(const u32 * regBase, u32 altRegs);
u32 GetPpOvercrossRightSize(const u32 * regBase, u32 altRegs);
u32 GetPpOvercrossLeftSize(const u32 * regBase, u32 altRegs);

u32 GetPpScalingModeHor(const u32 * regBase);
u32 GetPpScalingModeVer(const u32 * regBase);
u32 GetPpScalingCoeffH(const u32 * regBase);
u32 GetPpScalingCoeffV(const u32 * regBase);
u32 GetPpScalingCoeffInvH(const u32 * regBase);
u32 GetPpScalingCoeffInvV(const u32 * regBase);

u32 GetPpOutputWidth(const u32 * regBase);

#endif /* _PPHWREGDRV_H_ */
